home *** CD-ROM | disk | FTP | other *** search
/ Skunkware 5 / Skunkware 5.iso / src / X11 / wais / waisgate / HTPlain.c < prev    next >
C/C++ Source or Header  |  1995-05-09  |  2KB  |  126 lines

  1. /*        Plain text object        HTWrite.c
  2. **        =================
  3. **
  4. **    This version of the stream object just writes to a socket.
  5. **    The socket is assumed open and left open.
  6. **
  7. **    Bugs:
  8. **        strings written must be less than buffer size.
  9. */
  10. #include "HTPlain.h"
  11.  
  12. #define BUFFER_SIZE 4096;    /* Tradeoff */
  13.  
  14. #include "HTUtils.h"
  15. #include "HText.h"
  16. #include "HTStyle.h"
  17.  
  18. extern HTStyleSheet * styleSheet;
  19.  
  20.  
  21.  
  22. /*        HTML Object
  23. **        -----------
  24. */
  25.  
  26. struct _HTStream {
  27.     CONST HTStreamClass *    isa;
  28.  
  29.     HText *         text;
  30. };
  31.  
  32. /*    Write the buffer out to the socket
  33. **    ----------------------------------
  34. */
  35.  
  36.  
  37. /*_________________________________________________________________________
  38. **
  39. **            A C T I O N     R O U T I N E S
  40. */
  41.  
  42. /*    Character handling
  43. **    ------------------
  44. */
  45.  
  46. PRIVATE void HTPlain_put_character ARGS2(HTStream *, me, char, c)
  47. {
  48.     HText_appendCharacter(me->text, c);
  49. }
  50.  
  51.  
  52.  
  53. /*    String handling
  54. **    ---------------
  55. **
  56. */
  57. PRIVATE void HTPlain_put_string ARGS2(HTStream *, me, CONST char*, s)
  58. {
  59.     HText_appendText(me->text, s);
  60. }
  61.  
  62.  
  63. PRIVATE void HTPlain_write ARGS3(HTStream *, me, CONST char*, s, int, l)
  64. {
  65.     CONST char* p;
  66.     CONST char* e = s+l;
  67.     for (p=s; s<e; p++) HText_appendCharacter(me->text, *p);
  68. }
  69.  
  70.  
  71.  
  72. /*    Free an HTML object
  73. **    -------------------
  74. **
  75. **    Note that the SGML parsing context is freed, but the created object is not,
  76. **    as it takes on an existence of its own unless explicitly freed.
  77. */
  78. PRIVATE void HTPlain_free ARGS1(HTStream *, me)
  79. {
  80.     free(me);
  81. }
  82.  
  83. /*    End writing
  84. */
  85.  
  86. PRIVATE void HTPlain_end_document ARGS1(HTStream *, me)
  87. {
  88.     HText_endAppend(me->text);
  89. }
  90.  
  91.  
  92.  
  93. /*        Structured Object Class
  94. **        -----------------------
  95. */
  96. PUBLIC CONST HTStreamClass HTPlain =
  97. {        
  98.     "SocketWriter",
  99.     HTPlain_free,
  100.     HTPlain_end_document,
  101.     HTPlain_put_character,     HTPlain_put_string, HTPlain_write,
  102. }; 
  103.  
  104.  
  105. /*        New object
  106. **        ----------
  107. */
  108. PUBLIC HTStream* HTPlainPresent ARGS3(
  109.     HTPresentation *,    pres,
  110.     HTParentAnchor *,    anchor,    
  111.     HTStream *,        sink)
  112. {
  113.  
  114.     HTStream* me = (HTStream*)malloc(sizeof(*me));
  115.     if (me == NULL) outofmem(__FILE__, "HTPlain_new");
  116.     me->isa = &HTPlain;       
  117.  
  118.     me->text = HText_new(anchor);
  119.     HText_setStyle(me->text, HTStyleNamed(styleSheet, "Example"));
  120.     HText_beginAppend(me->text);
  121.  
  122.     return (HTStream*) me;
  123. }
  124.  
  125.  
  126.